#include<bits/stdc++.h>
using namespace std;
const int N=100010;
struct qvjian
{
    int l;
    int r;
    bool operator<(const qvjian& b)const
    {
        return l<b.l;
    }
}arr[N];
vector<qvjian>ans;
int n;
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int l,r;
        cin>>l>>r;
        arr[i]={l,r};
    }
    //按照区间左端点排序
    sort(arr,arr+n);
    int ret=1;
    int begin=arr[0].l;
    int end=arr[0].r;
    for(int i=1;i<n;i++)
    {
        int l=arr[i].l;
        int r=arr[i].r;
        if(l<=end)
        {
            //区间相交右端点去最大的交集
            end=max(end,r);
        }
        else
        {
            //此时把区间答案加入
            ret++;
            ans.push_back({begin,end});
            begin=l;
            end=r;
        }
    }
    ans.push_back({begin,end});
    cout<<ret<<endl;
    cout<<"合并后的区间如下"<<endl;
    for(auto&ch:ans)
    {
        cout<<ch.l<<" "<<ch.r<<endl;
    }
}